Back in black#
사운드 샘플(
.wav
파일)을 로드한다음원이 어떤 음표(또는 코드)로 구성되어 있는지 확인한다.
: 주파수-음표 매칭 표는 구글 검색 등을 통해 찾을 수 있다.
https://en.wikipedia.org/wiki/Piano_key_frequencies
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from IPython.display import Audio
wav file을 불러온다.
시간에 따른 음성 신호를 도시하고 sound clip을 재생한다.
불러온 데이터는
data[0]
: samplling rate과data[1]
: time-series signal로 구성된다.requests 모듈이 import 되지 않는다면 셀에서 다음을 실행한다.
! pip install requests
import requests
#URL로 부터 파일 받기 from https://jonghank.github.io/ase3001/files/back_in_black.wav
response = requests.get('https://jonghank.github.io/ase3001/files/back_in_black.wav')
local_file_path = './test.wav'
if response.status_code == 200:
with open(local_file_path, 'wb') as file:
file.write(response.content)
print("Download success")
else:
print("Download fail")
data = wavfile.read('./test.wav')
framerate = data[0]
sounddata = data[1]
t = np.arange(0,len(sounddata))/framerate
plt.figure(figsize=(12,4), dpi=100)
plt.plot(t,sounddata[:,0], label='Right channel')
plt.plot(t,sounddata[:,1], label='Left channel')
plt.xlabel(r'$t$')
plt.title('Stereo signal')
plt.legend()
plt.show()
Audio([sounddata[:,1], sounddata[:,0]], rate=framerate, autoplay=True)
Download success

Right channel과 left channel로 구성된 데이터를 더해서 mono data 형성
# sounddata: right channel과 left channel로 구성
# right channel과 left channel 더하기
mono = sounddata@[1,1]
plt.figure(figsize=(12,4), dpi=100)
plt.plot(t, mono)
plt.xlabel(r'$t$')
plt.title('Mono signal')
plt.show()
Audio(mono, rate=framerate, autoplay=True)

시간 구간 \(0.1\le t \le 0.5\)의 데이터를 추출하고 새로운 시계열 데이터 \(x_1(t)\)을 생성하시오.
푸리에 변환을 이용하여 지배적인 5개의 주파수와 그에 해당하는 음을 추출하고, 그 음들이 어떤 화음을 만드는지 확인하시오 [ by
np.fft()
] .
# your code here
시간 구간 \(1.05\le t \le 1.4\)의 데이터를 추출하고 새로운 시계열 데이터 \(x_2(t)\)을 생성하시오.
푸리에 변환을 이용하여 지배적인 5개의 주파수와 그에 해당하는 음을 추출하고 그 음들이 어떤 화음을 만드는지 확인하시오 [ by
np.fft()
] .
# your code here